<?php

namespace app\api\util;

use think\Collection;

/**
 * 实现laravel的集合方法
 */
class Laravel
{
    /**
     * 根据指定的键将数组的元素进行索引。
     *
     * @param mixed 要进行索引的数组。
     * @param string $keyField 用于生成索引的字段名或属性名。
     *
     * @return array 索引后的数组，键为指定字段的值。
     */
    public static function keyBy($items, string $keyField): array
    {
        $keyedItems = [];
        foreach ($items as $item) {
            if (is_array($item) && array_key_exists($keyField, $item)) {
                $keyedItems[$item[$keyField]] = $item;
            } elseif (is_object($item) && property_exists($item, $keyField)) {

                $keyedItems[$item->$keyField] = $item;
            } else {
                continue;
            }
        }
        return $keyedItems;
    }
    /**
     * 通用分组函数
     * @param $collection
     * @param $key
     * @return array
     */
    public static function groupBy($collection, $key): array
    {
        $grouped = [];
        foreach ($collection as $item) {
            $groupName = $item[$key];
            if (!isset($grouped[$groupName])) {
                $grouped[$groupName] = [];
            }
            $grouped[$groupName][] = $item;
        }
        return $grouped;
    }
}